package com.gopay.common.domain.gsrt.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * @Description: 分账路径文本转bean
 * @author hougn
 * @date 2016年1月27日 下午2:35:16 
 *
 */
public class RouteText2Bean {

    private static Logger logger = LoggerFactory.getLogger(RouteText2Bean.class);

    /**
     * 根据文件内容转换java对象
     * @param text 文件内容，符号必须是英文格式 例：  a,b,c,d;e,f,g,h
     * @param cls
     * @param map 文件内容和目标对象属性对应坐标 例：{0:a,1:b,2:c,3:d}
     * @return
     */
    public static <T> List<T> text2Bean(String text, Class<T> cls, Map<Integer, String> map) {
        if (StringUtils.isBlank(text)) {
            logger.error("根据文件内容转换java对象出错,文件内容为空");
            return null;
        }

        List<T> list = new ArrayList<>();
        try {
            // 截取";"分隔符
            String[] rows = text.split(";");
            for (String row : rows) {
                // 截取","分隔符
                String[] datas = row.split(",");
                Map<String, String> beanMap = new HashMap<>();
                /*for (Map.Entry<Integer, String> entry : map.entrySet()) {
                    beanMap.put(entry.getValue(), datas[entry.getKey()].trim());
                }*/
                for(int i = 0 ; i < datas.length ; i++){
                    beanMap.put(map.get(i), datas[i].trim());
                }
                T t = cls.newInstance();
                BeanUtils.populate(t, beanMap);
                list.add(t);
            }
        } catch (Exception e) {
            logger.error("根据文本内容转换java对象出错", e);
            throw new RuntimeException("根据文本内容转换java对象出错", e);
        }
        return list;
    }

}
